package com.hegongda.service.impl;

import com.hegongda.bean.Cart;
import com.hegongda.bean.CartItem;
import com.hegongda.bean.Product;
import com.hegongda.dao.ProductDao;
import com.hegongda.service.CartService;
import com.hegongda.utils.BeanFactory;

import java.sql.SQLException;

public class CartServiceImpl implements CartService {
    private ProductDao pd = BeanFactory.newInstance(ProductDao.class);
    @Override
    public void addCart(String pid, String count , Cart cart) {
        try {
            Product oneProduct = pd.getOneProduct(pid);
            CartItem cartItem = new CartItem();
            cartItem.setProduct(oneProduct);
            cartItem.setCount(Integer.parseInt(count));
            if(cart.getItemMap().containsKey(pid)){
                //有这个购物项,取出原有购物项
                CartItem old =  cart.getItemMap().get(pid);
                //修改数量,原有的数量+新购物项数量
                old.setCount( old.getCount() +  cartItem.getCount());
            }else {
                //没有购物项,存储集合
                cart.getItemMap().put(pid,cartItem);
            }
            //从新计算总金额
            cart.setTotal(cart.getTotal() + cartItem.getSubTotal());
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 移除购物车中的购物项
     * Map集合中的相同键,移除
     * 总金额计算
     */
    public void removeItem(String pid,Cart cart){
        CartItem cartItem =  cart.getItemMap().remove(pid);
        //计算总金额= 总金额-被移除掉购物项的小计
        cart.setTotal(cart.getTotal()-cartItem.getSubTotal());
        //if (())
    }
    public void clearItem(Cart cart){
       cart.getItemMap().clear();
        cart.setTotal(0);
    }

    @Override
    public void addRCarts(String pid, Cart Rcarts, Cart catr, String style) {
        if("add".equals(style)) {
            CartItem cartItem = null;
            try {
                cartItem = catr.getItemMap().get(pid).clone();
            } catch (CloneNotSupportedException e) {
                e.printStackTrace();
            }
            Rcarts.getItemMap().put(pid,cartItem);
            Rcarts.setTotal(Rcarts.getTotal()+catr.getItemMap().get(pid).getSubTotal());
        }else if("cle".equals(style)) {
            Rcarts.getItemMap().remove(pid);
            Rcarts.setTotal(Rcarts.getTotal()-catr.getItemMap().get(pid).getSubTotal());
        }
    }

    @Override
    public void editCart(String pid, Cart Rcarts, Cart catr, String count) {
        int andcount = Integer.parseInt(count)-catr.getItemMap().get(pid).getCount();
        double shopprict = catr.getItemMap().get(pid).getProduct().getShop_price();
        double andprict = andcount*shopprict;
        catr.getItemMap().get(pid).setSubTotal(catr.getItemMap().get(pid).getSubTotal()+andprict);
        catr.setTotal(catr.getTotal()+andprict);
        catr.getItemMap().get(pid).setCount(Integer.parseInt(count));
        if(Rcarts.getItemMap().get(pid)!=null){
            Rcarts.getItemMap().get(pid).setSubTotal(Rcarts.getItemMap().get(pid).getSubTotal()+andprict);
            Rcarts.setTotal(Rcarts.getTotal()+andprict);
            Rcarts.getItemMap().get(pid).setCount(Integer.parseInt(count));
        }
    }

}
